/*
Audica Uploader - application for convenient uploading to various file hostings
Copyright (C) 2011-2012 Makarov Andrey (Winand)

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#ifndef NETWORKUPLOADMANAGER_H
#define NETWORKUPLOADMANAGER_H
#include <QObject>
#include <QtNetwork>
#include "uploadworker.h"
#include "uploadform.h"
#include "global.h"
#include "uploadsummary.h"

#define SCRIPT_PLUGINS "libscript*"
//Upload window screen offsets
#define OFF_FRM(x) (x + 4)
//Length of animation when rearranging upload windows
#define ANIM_TIME 1000

class NetworkUploadManager : public QObject
{
    Q_OBJECT
public:
    explicit NetworkUploadManager(QObject *parent = 0);
    QNetworkAccessManager netw;
signals:

public slots:
    void newUploadTaskInput(const QList<QString> message);
    QNetworkAccessManager* getAccessManager() {
        return &netw;
    }
private:
    void animateWindows(int fromIdx);
    UploadForm* newUploadForm();
    bool loadScriptLib(const QString lib);
    QMap<QString, scriptplugin> scriptPlugins;
    QList<UploadForm*> forms;
    QList<QPoint> formpos;
    QList<UploadWorker*> workers;
    UploadSummary frmsummary;
    bool killUploadTask(int index);
private slots:
    void userCanceled();
    void finished(const QString filepath, UploadResult* res);
    void timeout();
    void authenticationRequired(QNetworkReply* reply, QAuthenticator* authenticator);
};

#endif // NETWORKUPLOADMANAGER_H
